#include <flash/nand.h>

#define LP_OPTIONS (NAND_SAMSUNG_LP_OPTIONS | NAND_NO_READRDY | NAND_NO_AUTOINCR)
#define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)


const struct NandFlashpDesc g_vNandDevID[] =
{
	{"NAND 16MB 1.8V 8-bit",	0x33, 512, 16, 0x4000, 0},
	{"NAND 16MB 3.3V 8-bit",	0x73, 512, 16, 0x4000, 0},
	{"NAND 16MB 1.8V 16-bit",	0x43, 512, 16, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 16MB 3.3V 16-bit",	0x53, 512, 16, 0x4000, NAND_BUSWIDTH_16},

	{"NAND 32MB 1.8V 8-bit",	0x35, 512, 32, 0x4000, 0},
	{"NAND 32MB 3.3V 8-bit",	0x75, 512, 32, 0x4000, 0},
	{"NAND 32MB 1.8V 16-bit",	0x45, 512, 32, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 32MB 3.3V 16-bit",	0x55, 512, 32, 0x4000, NAND_BUSWIDTH_16},

	{"NAND 64MB 1.8V 8-bit",	0x36, 512, 64, 0x4000, 0},
	{"K9F1208",	                0x76, 512, 64, 0x4000, 0},
	{"NAND 64MB 1.8V 16-bit",	0x46, 512, 64, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 64MB 3.3V 16-bit",	0x56, 512, 64, 0x4000, NAND_BUSWIDTH_16},

	{"NAND 128MB 1.8V 8-bit",	0x78, 512, 128, 0x4000, 0},
	{"NAND 128MB 1.8V 8-bit",	0x39, 512, 128, 0x4000, 0},
	{"NAND 128MB 3.3V 8-bit",	0x79, 512, 128, 0x4000, 0},
	{"NAND 128MB 1.8V 16-bit",	0x72, 512, 128, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 128MB 1.8V 16-bit",	0x49, 512, 128, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 128MB 3.3V 16-bit",	0x74, 512, 128, 0x4000, NAND_BUSWIDTH_16},
	{"NAND 128MB 3.3V 16-bit",	0x59, 512, 128, 0x4000, NAND_BUSWIDTH_16},

	{"NAND 256MB 3.3V 8-bit",	0x71, 512, 256, 0x4000, 0},

	/**
	 * These are the new chips with large page size. The nPageSize and the
	 * nEraseSize is determined from the extended id bytes
	 */
	
	{"NAND 64MB 1.8V 8-bit",	0xA2, 0,  64, 0, LP_OPTIONS},
	{"NAND 64MB 3.3V 8-bit",	0xF2, 0,  64, 0, LP_OPTIONS},
	{"NAND 64MB 1.8V 16-bit",	0xB2, 0,  64, 0, LP_OPTIONS16},
	{"NAND 64MB 3.3V 16-bit",	0xC2, 0,  64, 0, LP_OPTIONS16},

	
	{"NAND 128MB 1.8V 8-bit",	0xA1, 0, 128, 0, LP_OPTIONS},
	{"NAND 128MB 3.3V 8-bit",	0xF1, 0, 128, 0, LP_OPTIONS},
	{"NAND 128MB 1.8V 16-bit",	0xB1, 0, 128, 0, LP_OPTIONS16},
	{"NAND 128MB 3.3V 16-bit",	0xC1, 0, 128, 0, LP_OPTIONS16},

	
	{"NAND 256MB 1.8V 8-bit",	0xAA, 0, 256, 0, LP_OPTIONS},
	{"K9F2G08",	                0xDA, 0, 256, 0, LP_OPTIONS},
	{"NAND 256MB 1.8V 16-bit",	0xBA, 0, 256, 0, LP_OPTIONS16},
	{"NAND 256MB 3.3V 16-bit",	0xCA, 0, 256, 0, LP_OPTIONS16},

	
	{"NAND 512MB 1.8V 8-bit",	0xAC, 0, 512, 0, LP_OPTIONS},
	{"NAND 512MB 3.3V 8-bit",	0xDC, 0, 512, 0, LP_OPTIONS},
	{"NAND 512MB 1.8V 16-bit",	0xBC, 0, 512, 0, LP_OPTIONS16},
	{"NAND 512MB 3.3V 16-bit",	0xCC, 0, 512, 0, LP_OPTIONS16},

	
	{"NAND 1GB 1.8V 8-bit",	    0xA3, 0, 1024, 0, LP_OPTIONS},
	{"NAND 1GB 3.3V 8-bit",	    0xD3, 0, 1024, 0, LP_OPTIONS},
	{"NAND 1GB 1.8V 16-bit",	0xB3, 0, 1024, 0, LP_OPTIONS16},
	{"NAND 1GB 3.3V 16-bit",	0xC3, 0, 1024, 0, LP_OPTIONS16},

	
	{"NAND 2GB 1.8V 8-bit",	    0xA5, 0, 2048, 0, LP_OPTIONS},
	{"NAND 2GB 3.3V 8-bit",	    0xD5, 0, 2048, 0, LP_OPTIONS},
	{"NAND 2GB 1.8V 16-bit",	0xB5, 0, 2048, 0, LP_OPTIONS16},
	{"NAND 2GB 3.3V 16-bit",	0xC5, 0, 2048, 0, LP_OPTIONS16},


	{"AND 128MB 3.3V 8-bit",	0x01, 2048, 128, 0x4000,
	 NAND_IS_AND | NAND_NO_AUTOINCR |NAND_NO_READRDY | NAND_4PAGE_ARRAY |
	 BBT_AUTO_REFRESH},

	{NULL,}
};


const struct NandVendor g_vNandVendID[] =
{
	{NAND_MFR_TOSHIBA,  "Toshiba"},
	{NAND_MFR_SAMSUNG,  "Samsung"},
	{NAND_MFR_FUJITSU,  "Fujitsu"},
	{NAND_MFR_NATIONAL, "National"},
	{NAND_MFR_RENESAS,  "Renesas"},
	{NAND_MFR_STMICRO,  "ST Micro"},
	{NAND_MFR_HYNIX,    "Hynix"},
	{NAND_MFR_MICRON,   "Micron"},
	{NAND_MFR_AMD,      "AMD"},
	{0x0,               "Unknown"}
};


